package com.azt.api.service;
import java.util.List;
import java.util.Map;

import com.azt.api.pojo.Category;
import com.azt.api.pojo.Pcate;
import com.azt.model.easy.EasyTree;
import com.azt.model.page.Pagination;


/** 
 * @ClassName: ProCategoryService 
 * @Description: TODO
 * @author: zhoudongdong
 * @param <JSONArray>
 * @date: 2016年9月5日 上午10:07:18  
 */
public interface ProCategoryService {

	/**
	 * 分页查
	 * @param pageno
	 * @param pagesize
	 * @param searchMap
	 * @return
	 * @author 张栋  2016年5月5日下午2:25:54
	 */
	Pagination getProCategoryPage(int pageno, int pagesize, Map<String, String> searchMap);
	
	
	
	/**
	 * @return 类目树
	 */
	public List<EasyTree> getProCategoryTree(Integer pid);

	/*
	 * @return 类目树
	 */
	public List<EasyTree> getCategorysTreeBack(Integer pid);

	
	/**根据父节点获取当前节点的列表
	 * @return
	 * @author 张栋  2016年7月6日下午3:42:20
	 */
	public List<Category> getAllCategoryByPid(Integer pid);


	/**
	 * 只有两层的tree
	 */
	public List<Category>  getCategorysByPidForTree(Integer pid);

	/**
	 * 根据节点类型查
	 * @param catetype
	 * @return
	 * @author 张栋  2016年7月6日下午3:48:20
	 */
	public List<Category>  getCategorysByCateType(Integer catetype);


	/***
	 * 根据ID获取ProCategory对象
	 */
	public Category getCategorysById(Integer proId);


	public void save(Category pro);



	/**
	 * 用于根据 id 显示 出名称
	 * Map<id,title>
	 * @return
	 * @author 张栋  2016年7月8日上午11:27:16
	 */
	public Map<String, Category >  getCategorysMap();

	Category getEntityById(Integer id);
	
	
	void saveOrUpdate(Category pc);
	
	void delete(Category pc);
	
	
	/**
	 * @Description 根据类目type获取集合 1:类别 2：系统名称3:产品名称
	 * @param type
	 * @return
	 */
	List<Category> getCategoryByType(Integer type);
	
	
	/**
	 * @Description 根据用逗号拼凑的ids（形如1,2,3,4） ，获得用逗号间隔的names
	 * @param ids
	 * @return
	 */
	String findCategoryNamesByIds(String ids);
	
	
	/**
	 * @Description 根据用逗号拼凑的codes（形如1,2,3,4） ，获得用逗号间隔的names
	 * @param codes
	 * @return
	 */
	String findCategoryNamesByCodes(String codes);
	
	
	/** 
	 * 查询根目录
	 * @Title: queryFathCategorys 
	 * @Description: TODO
	 * @return
	 * @return: List<Category>
	 * @author: zhoudongdong 2016年9月5日 上午10:07:22 
	 */
	List<Category> queryFathCategorys();



	/** 
	 * @Title: getChildenCategorys 
	 * @Description: 查询儿子目录
	 * @param id
	 * @return
	 * @return: List<Category>
	 * @author: 查恒 2016年9月12日 下午4:23:08 
	 */
	List<Category> getChildenCategorys(Integer id);



	/** 
	 * @Title: getFatherCategorys 
	 * @Description: 关联父目录
	 * @param id
	 * @return
	 * @return: Category
	 * @author: 查恒 2016年9月12日 下午4:25:14 
	 */
	Category getFatherCategorys(Integer id);
	
	/** 
	 * @Title: doSetAssociate 
	 * @Description: 做所有关联
	 * @param category
	 * @return: void
	 * @author: 查恒 2016年9月12日 下午4:42:47 
	 */
	Category doSetAssociate(Category category); 

	/**
	 * 用于测试是否需要自动生成静态类别模板
	 * Created by 张栋 on 2016/11/9 17:18
     * @param type
     */
	boolean proCategoryTempAuotCreate(int type);

    List<Category> findTopCategory();

	/**
	 * tree 拖动  修改上级
	 * @param targetId
	 * @param id
	 */
	void changeParent( Integer targetId , Integer id);



	Category getCategorysByCateCode(String code);



	/** 
	 * @Title: getPcateById 
	 * @Description: 对老表进行操作
	 * @param parseInt
	 * @return
	 * @return: Pcate
	 * @author: 查恒 2016年12月13日 下午3:39:17 
	 */
	Pcate getPcateById(int pcateId);



	void updatePcate(Pcate pcateById);



	List<Category> getAllCategory();



	List<Category> getCheckedCategoryByBrandId(Integer id);



	/** 
	 * @Title: getParentCategorysIdBycategoryTId 
	 * @Description: 获得全部的父子节点ID的集合
	 * @param categoryTId
	 * @return
	 * @return: Map<String,Integer>
	 * @author: 查恒 2017年1月18日 下午4:00:59 
	 */
	Map<String,Integer> getParentCategorysIdBycategoryTId(Integer categoryTId);


    List<Category> findCategory(Integer id, Integer pid, Integer cateType);

	Map getParentCates(int cateId);

	/**
	 * 获取所有类别, 内有初始化函数,缓存
	 * Created by 张栋 on 2017/2/28 18:59
	 */
	List<Category> getAllCategories();

	/**
	 * 获取所有类别 ID + 时间
	 */
	List<Category> listAllCategoryBySize(int size);

	/**
	 * @param  relationFather 关联父级
	 * @param  relationChild 关联子级
	 * Created by 张栋 on 2017/3/22 10:03
	 */
	Category getCacheCategoryById(Integer catid,boolean relationFather,boolean relationChild);

	/**
	 * 根据父节点获取所有子节点
	 * 从缓存中拿,注意: 双关联时,禁止修改数据.以免影响缓存内的数据
	 * @param  relationFather 关联父级
	 * @param  relationChild 关联子级
	 * Created by 张栋 on 2017/3/22 10:03
	 */
	List<Category> getCacheCategoryByPid(Integer pid,boolean relationFather,boolean relationChild);
}

